Callback hell também é um tópico importante em entrevistas técnicas, pois testa a compreensão do desenvolvedor sobre código assíncrono e sua capacidade de refatorar o código para melhor legibilidade e facilidade de manutenção.
A programação assíncrona é crucial no desenvolvimento moderno de JavaScript, permitindo a execução sem bloqueio e melhorando o desempenho, especialmente para operações vinculadas a E/S. No entanto, essa conveniência às vezes pode levar a uma condição conhecida como "inferno de retorno de chamada".
Neste artigo, vamos nos aprofundar em:
Callback hell, muitas vezes referido como "Pyramid of Doom", ocorre quando várias operações assíncronas aninhadas dependem umas das outras para serem executadas em sequência. Esse cenário leva a uma confusão de retornos de chamada profundamente aninhados, tornando o código difícil de ler, manter e depurar.
Exemplo de inferno de retorno de chamada:
getData(function(data) { processData(data, function(processedData) { saveData(processedData, function(response) { sendNotification(response, function(notificationResult) { console.log("All done!"); }); }); }); });
O problema do inferno de retorno de chamadaO código acima executa várias operações assíncronas em sequência. Embora funcione, rapidamente se torna incontrolável se mais tarefas forem adicionadas, dificultando a compreensão e a manutenção. A estrutura aninhada se assemelha a uma pirâmide, daí o termo "Pirâmide da Perdição".
Promessas são usadas em JavaScript. As promessas representam a eventual conclusão (ou falha) de uma operação assíncrona e permitem escrever código limpo e mais gerenciável. Promessas simplificam o código - Com Promessas, a estrutura aninhada é achatada e o tratamento de erros é mais centralizado, tornando o código mais fácil de ler e manter.
Aqui está como seria o exemplo anterior do inferno de retorno de chamada usando Promises:
getData() .then(data => processData(data)) .then(processedData => saveData(processedData)) .then(response => sendNotification(response)) .then(notificationResult => { console.log("All done!"); }) .catch(error => { console.error("An error occurred:", error); });
Essa abordagem elimina retornos de chamada profundamente aninhados. Cada bloco 'então' representa o próximo passo na cadeia, tornando o fluxo muito mais linear e fácil de seguir. O tratamento de erros também é centralizado no bloco 'catch'.Como funcionam as promessas
.then()' e '.catch()' para lidar com cenários de sucesso e falha.
getData() .then(data => processData(data)) .then(processedData => saveData(processedData)) .then(response => sendNotification(response)) .then(notificationResult => { console.log("All done!"); }) .catch(error => { console.error("An error occurred:", error); });
No código acima, a função 'getData()' retorna uma promessa. Se a operação assíncrona for bem-sucedida, a promessa é cumprida com os dados, caso contrário, é rejeitada com erro.Encadeando Promessas
getData() .then(data => processData(data)) .then(processedData => saveData(processedData)) .then(response => sendNotification(response)) .then(notificationResult => { console.log("All done!"); }) .catch(error => { console.error("An error occurred:", error); });Ao encadear Promises, o código se torna simples, mais legível e mais fácil de manter.
async/await entra em jogo.
A sintaxe
Async/await nos permite escrever código assíncrono de uma forma que se assemelha ao código síncrono. Isso torna seu código mais limpo e fácil de raciocinar.
getData() .then(data => processData(data)) .then(processedData => saveData(processedData)) .then(response => sendNotification(response)) .then(notificationResult => { console.log("All done!"); }) .catch(error => { console.error("An error occurred:", error); });
No código acima:
A palavra-chave 'async' é usada para definir uma função assíncrona.
- 'await' pausa a execução da função até que a promessa seja resolvida ou rejeitada, fazendo com que o código pareça síncrono.
- O tratamento de erros é muito mais simples, usando um único bloco 'try-catch'.
- Async/await elimina o inferno de retorno de chamada e longas cadeias de promessas, tornando-o a maneira preferida de lidar com operações assíncronas em JavaScript moderno.
Callback hell é um problema comum em JavaScript que surge ao trabalhar com múltiplas operações assíncronas. Retornos de chamada profundamente aninhados levam a códigos insustentáveis e propensos a erros. No entanto, com a introdução de Promises e async/await, os desenvolvedores agora têm maneiras de escrever códigos mais limpos, gerenciáveis e escaláveis.
Promessas nivelam retornos de chamada aninhados e centralizam o tratamento de erros, enquanto async/await simplifica ainda mais a lógica assíncrona, fazendo-a parecer síncrona. Ambas as técnicas eliminam o caos do inferno de retorno de chamada e garantem que seu código permaneça legível, mesmo à medida que aumenta em complexidade.
Identificadores de mídia socialObrigado pela leitura!Se você achou este artigo útil, sinta-se à vontade para se conectar comigo em meus canais de mídia social para obter mais informações:
GitHub: [AmanjotSingh0908]
- LinkedIn: [Amanjot Singh Saini]
- Twitter: [@AmanjotSingh]
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3